console.log('*****************');
console.log('*****************');
console.log('*****************');
console.log('***********循环');
var arr = [6, 9, 28, 18, 36, 1]

arr.soft2Sort = function (fn) {
  /*
        初始想法，指定一个值等于数组的第一个元素，然后从第二个元素开始遍历，如果后面的元素比当前最小值还要小，
        那就让当前最小值等于当前循环时下标所代表的值

    */
  console.log(fn)
  console.log(this)
  // 如果没有传参数，则让它具有一个默认的排序函数
  if (fn === undefined) {
    fn = (a, b) => a > b
  }
  // 外层循环，遍历数组当中的每一个元素
  for (var j = 0; j < this.length; j++) {
    var minItem = this[j]
    var minIndex = j
    // 内层循环，遍历数组从j+1开始的每一个元素，负责找到从j下标开始的最小值或者最大值
    for (var i = j + 1; i < this.length; i++) {
      if (fn(minItem, this[i])) {
        minItem = this[i]
        minIndex = i
      }
    }
    console.log(minItem)
    // 和第j个元素交换找到的最小值或者最大值
    var a = this[j]
    this[j] = this[minIndex]
    this[minIndex] = a
    // 输出循环中数组现在的状态
    console.log(this)
  }
}

arr.soft2Sort(function (a, b) {
  return a - b
})